﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HandlingProcedures.DataBase
{
    /// <summary>
    /// Хранилище данных
    /// </summary>
    public interface IRepository
    {
        /// <summary>
        /// Список клиентов
        /// </summary>
        /// <returns></returns>
        List<Client> LoadClients();

        /// <summary>
        /// Список процедур
        /// </summary>
        /// <returns>названия процедур</returns>
        List<string> LoadProcedures();

        /// <summary>
        /// Загрузка комнат в которой проводится процедура
        /// </summary>
        /// <param name="procedureName">Название процедуры</param>
        /// <param name="dateOfProcedure">Дата процедуры</param>
        /// <returns>Номера процедурных кабинетов</returns>
        List<string> LoadProcRooms(string procedureName, DateTime dateOfProcedure);

        /// <summary>
        /// Загрузка графика процедуры для определенной даты
        /// </summary>
        /// <param name="procedureName">Название процедуры</param>
        /// <param name="dateOfProcedure">Дата процедуры</param>
        /// <param name="room">Процедурная комната</param>
        /// <returns>Процедуры в определенной процедурной комнате</returns>
        List<MedicalProcedureInRoom> LoadAssignedRoomsForProcedure(string procedureName, DateTime dateOfProcedure, string room);

        /// <summary>
        /// Загрузка уже назначенных процедур
        /// </summary>
        /// <param name="id">ID клиента</param>
        /// <returns>Процедуры, назначенные клиенту</returns>
        List<MedicalProcedure> LoadSchedule(Int32 id);

        /// <summary>
        /// Получение подробной информации о клиенте
        /// </summary>
        /// <param name="id">ID клиента</param>
        /// <returns>Информация о клиенте</returns>
        ClientInformation GetInformationAboutClient(Int32 id);

        /// <summary>
        /// Загрузка свободных процедурных кабинетов для определенной процедуры и даты
        /// </summary>
        /// <param name="procedureName">Название процедуры</param>
        /// <param name="dateOfProcedure">Дата проведения процедуры</param>
        /// <returns></returns>
        List<MedicalProcedure> LoadFreeRoomsForProcedure(string procedureName, DateTime dateOfProcedure);

        /// <summary>
        /// Сохранение назначенной процедуры в хранилище
        /// </summary>
        /// <param name="clientId">ID клиента</param>
        /// <param name="procedures">Перечисление процедур</param>
        void SaveNewProceduresForClient(int clientId, IEnumerable<MedicalProcedure> procedures);

        /// <summary>
        /// Удаление процедур из графика клиента
        /// </summary>
        /// <param name="clientId">ID клиента</param>
        /// <param name="procedures"Перечисление процедур></param>
        void DeleteProcedure(int clientId, IEnumerable<MedicalProcedure> procedures);
    }
}
